// 2013年版权归Go作者所有。版权所有。
// 此源代码的使用受BSD样式的约束
// 可以在许可证文件中找到的许可证。

package objabi

// 此文件定义PCDATA和FUNCDATA指令的ID
// 在Go二进制文件中。
// None
// 这些参数必须符合../../../runtime/funcdata.h和
// ../../../runtime/symtab.go。

const (
	PCDATA_UnsafePoint   = 0
	PCDATA_StackMapIndex = 1
	PCDATA_InlTreeIndex  = 2

	FUNCDATA_ArgsPointerMaps    = 0
	FUNCDATA_LocalsPointerMaps  = 1
	FUNCDATA_StackObjects       = 2
	FUNCDATA_InlTree            = 3
	FUNCDATA_OpenCodedDeferInfo = 4
	FUNCDATA_ArgInfo            = 5

	// ArgsSizeUnknown在Func.argsize中设置为标记所有函数
	// 其参数大小未知（C vararg函数和
	// 没有明确规范的汇编代码）。
	// 此值由编译器、汇编器或链接器生成。
	ArgsSizeUnknown = -0x80000000
)

// 特殊数据值。
const (
	// PCDATA_非安全点值。
	PCDATA_UnsafePointSafe   = -1 // 异步抢占安全
	PCDATA_UnsafePointUnsafe = -2 // 异步抢占不安全

	// PCDATA_重新启动1（2）应用于指令序列，在
	// 如果发生异步抢占，我们应该退出PC
	// 恢复时返回到序列的开头。
	// 我们需要两个，以便区分序列的开始/结束
	// 如果两个序列相邻。
	PCDATA_Restart1 = -3
	PCDATA_Restart2 = -4

	// 与PCDATA_Restart1类似，但如果异步抢占，则返回函数项。
	PCDATA_RestartAtEntry = -5
)
